package com.sxf.redis.iredis;

import java.util.Map;
import java.util.Set;

/**
 * 
 * @description: hash工具类
 * @author: zhangyb@ccccit.com.cn 
 * @date: 2021年1月5日 下午2:03:23
 */
public interface IHashRedisUtils {

	/**
	 * 设置hash值
	 * @param nameSpace
	 * @param key
	 * @param hkey
	 * @param value
	 * @param timeoutSeconds
	 */
	void setHash(String nameSpace, String key, String hkey, Object value, long timeoutSeconds);

	/**
	 * 设置hash值
	 * @param key
	 * @param hkey
	 * @param value
	 * @param timeoutSeconds
	 */
	default void setHash(String key, String hkey, Object value, long timeoutSeconds) {
		setHash(null, key, hkey, value, timeoutSeconds);
	}

	/**
	 * 获取hash值
	 * @param nameSpace
	 * @param key
	 * @param hkey
	 * @return
	 */
	Object getHash(String nameSpace, String key, String hkey);

	/**
	 * 获取hash值
	 * @param key
	 * @param hkey
	 * @return
	 */
	default Object getHash(String key, String hkey) {
		return getHash(null, key, hkey);
	}

	/**
	 * 获取当前hash所有key
	 * @param nameSpace
	 * @param key
	 * @return
	 */
	Set<Object> getHashKeys(String nameSpace, String key);

	/**
	 * 获取当前hash所有key
	 * @param key
	 * @return
	 */
	default Set<Object> getHashKeys(String key) {
		return getHashKeys(null, key);
	}

	/**
	 * 多key查询
	 * @param nameSpace
	 * @param key
	 * @param hkeys
	 * @return
	 */
	Map<Object, Object>  multiGet(String nameSpace, String key, Set<Object> hkeys);

	/**
	 * 多key查询
	 * @param key
	 * @param hkeys
	 * @return
	 */
	default Map<Object, Object>  multiGet(String key, Set<Object> hkeys) {
		return multiGet(null, key, hkeys);
	}

	/**
	 * 获取当前hash
	 * @param nameSpace
	 * @param key
	 * @return
	 */
	Map<Object, Object> getValueMap(String nameSpace, String key);

	/**
	 * 获取当前hash
	 * @param key
	 * @return
	 */
	default Map<Object, Object> getValueMap(String key) {
		return getValueMap(null, key);
	}

}
